// 定义自定义比较器
int compare(String a, String b) {
    // 定义花色的优先级
    String suits = "HCDS";  // 花色的优先级: H < C < D < S
    // 提取卡牌的花色和数字部分
    int numA = Integer.parseInt(a.substring(0, a.length() - 1)); // 数字部分
    int numB = Integer.parseInt(b.substring(0, b.length() - 1)); // 数字部分
    char suitA = a.charAt(a.length() - 1); // 花色部分
    char suitB = b.charAt(b.length() - 1); // 花色部分
    
    // 首先按花色进行比较
    int suitComparison = Integer.compare(suits.indexOf(suitA), suits.indexOf(suitB));
    if (suitComparison != 0) {
        return suitComparison;
    }
    
    // 如果花色相同，按数字部分比较
    return Integer.compare(numA, numB);
}

// 定义冒泡排序方法
void bubbleSort(ArrayList<String> list) {
    int n = list.size();
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            if (compare(list.get(j), list.get(j + 1)) > 0) {
                // 交换元素
                String temp = list.get(j);
                list.set(j, list.get(j + 1));
                list.set(j + 1, temp);
            }
        }
    }
}

// 创建并初始化卡牌列表
ArrayList<String> list = new ArrayList<>(List.of("4H", "3S", "7S", "8C", "2D", "3H"));

// 执行排序
bubbleSort(list);

// 输出排序后的结果
list
